﻿Public Class CLabelStateCheckState : Inherits CStateBase

    ''' <summary>
    ''' 実行可能かを判断する
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function IsEnter(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.IsEnter")
        If CCommon.isInStr(task.ActionCd, "ORDERTOLABEL", "LABEL") Then
            Return True
        Else
            Return False
        End If
    End Function

    ''' <summary>
    ''' 実行メソッド
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExecute(ByVal task As CTaskBase) As CStateBase
        Dim nextState As CStateBase = Nothing
        Dim pdaTask As CPDATask = DirectCast(task, CPDATask)
        Debug.WriteLine("CLabelCheckState.DoExecute")

        'キーレックスコード読んでくださいという
        'メッセージを表示する
        pdaTask.WindowManager.SetMessage(CCommon.CNS_MSG_065, CCommon.COLOR_BLACK, CCommon.COLOR_GREEN)
        task.ProcessText = task.ReadTextWait(-1)

        Select Case CBarcode.GetBarcodeType(task.ProcessText)
            'キーレックスバーコードの場合
            Case EnumBarcodeType.OUTER_LABEL_KIRECS

                '注文選択が出来る状態
                task.ActionCd = "ORDERSELECT"
               

            Case EnumBarcodeType.ORDER_CODE
                'MessageBox.Show("ORDER_CD確認")

                Dim ret As COrderData = pdaTask.ChkOrderLabelData(pdaTask.checkOrderCd)
                If Not ret Is Nothing Then
                    'pdaTask.setPrevData(ret)
                    'MessageBox.Show("ari")
                    ret.OrderRecord.RowColor = CCommon.COLOR_WHITE
                End If

                '注文選択が出来る状態
                task.ActionCd = "ORDERSELECT"

            Case EnumBarcodeType.EMP_CODE

                Dim AppManager As CApplicationManager = CApplicationManager.GetInstance
                Dim isStaticReadEmpCd As Boolean = AppManager.GetAppSettings.IsStaticReadEmpCd

                If isStaticReadEmpCd Then
                    ''従業員番号を読み取った場合アラート
                    Dim result As String = ""
                    Dim prevWindowMode As EnumWindowMode
                    Do While result <> "[OK]"
                        If result = "" Then
                            pdaTask.Hardware.alert()
                            prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                            pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_028, CCommon.COLOR_BLACK, CCommon.COLOR_WHITE)
                            pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                            'Debug.WriteLine(CCommon.CNS_MSG_015)

                        End If
                        result = task.ReadTextWait(-1)
                        'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                    Loop
                    pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)
                Else
                    ''名札自由読込
                    ''交代
                    Dim empDAO As CEmpDAO = CEmpDAO.GetInstance()
                    Dim empData As strctEmpInfo = empDAO.GetEmpInfo(task.ProcessText)
                    pdaTask.EmpInfo.empNo = empData.EmpCd
                    pdaTask.EmpInfo.empName = empData.EmpName
                    pdaTask.WindowManager.SetEmpInfo(pdaTask.EmpInfo.empNo & ":[" & pdaTask.EmpInfo.empName & "]")
                End If

                Return Me

            Case EnumBarcodeType.END_LABEL_CODE
                '終了コード読ました場合

                Dim AppManager As CApplicationManager = CApplicationManager.GetInstance
                Dim isInnerLabelCheck As Boolean = AppManager.GetAppSettings.IsInnerLabelCheck

                Dim result As String = ""

                ''未完了の注文有り
                ''アラート
                Dim prevWindowMode As EnumWindowMode
                Do While result <> "[YES]" And result <> "[NO]"
                    If result = "" Then
                        pdaTask.Hardware.alert()
                        prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                        pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_069, CCommon.COLOR_BLACK, CCommon.COLOR_WHITE)
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.YESNO_MODE)
                        'Debug.WriteLine(CCommon.CNS_MSG_013)

                    End If
                    result = task.ReadTextWait(-1)
                    'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                Loop
                pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)

                'If Not pdaTask.C_SHIPORDER.KirecsOrderCheck() Then
                'End If

                If result = "" Or result = "[YES]" Then
                    pdaTask.WindowManager.SetMessage(CCommon.CNS_MSG_037, CCommon.COLOR_BLACK, CCommon.COLOR_GREEN)

                    '照合途中のものもコミット------------->>>>>>>>>>>>>>>>>
                    '社内ラベルを最初のみでカウンタする
                    If pdaTask.preLabelData.Count >= 2 Then
                        'キーレクスラベルだけ、読んでいる状態ならカウンタする
                        Dim record As COrderRecord = pdaTask.WindowManager.GetCurrentRecord
                        ''ラベル情報をコミットする
                        pdaTask.CommitLabelDataAdd()
                        ''注文情報もコミットする
                        pdaTask.CommitOrderDataAdd()
                    End If
                    '照合途中のものもコミット------------->>>>>>>>>>>>>>>>>

                    ''データ送信
                    SyncLock pdaTask.m_SendLockObject
                        pdaTask.isSendingFlag = True

                        '注文データを送信
                        Try
                            Dim FPath As String = CApplicationManager.GetRealPath("action\", CApplicationManager.EnumSpecialFolder.PATH_MYDOCUMENT)
                            Dim FName As String = "OrderData_" & CCommon.From10To36(Now.Second) & ".csv"
                            If pdaTask.C_FileCommon.FileOutPut(FName, FPath, pdaTask.getOrderCommitData, EnumFileType.ORDER_TYPE) Then

                                ''ファイル圧縮してサーバーに送信
                                Dim sendTrx As CWebManager = CWebManager.GetInstance
                                sendTrx.UploadFile(FPath & FName, EnumFileType.ORDER_TYPE)
                                'ファイル送信
                            Else
                                CFileLog.WriteLog("SHIP_UP-" & FName & "----失敗----", CFileLog.LEVEL_ERROR, CFileLog.EnumLogType.UPLOAD)
                            End If
                        Catch ex As Exception
                        End Try

                        'ラベルデータを送信
                        Try
                            Dim FPath As String = CApplicationManager.GetRealPath("action\", CApplicationManager.EnumSpecialFolder.PATH_MYDOCUMENT)
                            Dim FName As String = "LabelData_" & CCommon.From10To36(Now.Second) & ".csv"
                            If pdaTask.C_FileCommon.FileOutPut(FName, FPath, pdaTask.getLabelCommitData, EnumFileType.LABEL_TYPE) Then
                                ''ファイル圧縮してサーバーに送信
                                Dim sendTrx As CWebManager = CWebManager.GetInstance
                                sendTrx.UploadFile(FPath & FName, EnumFileType.LABEL_TYPE)
                                'ファイル送信
                            Else
                                CFileLog.WriteLog("SHIP_UP-" & FName & "----失敗----", CFileLog.LEVEL_ERROR, CFileLog.EnumLogType.UPLOAD)
                            End If
                        Catch ex As Exception
                        End Try
                    End SyncLock
                    'pdaTask.isSendingFlag = False''直後にアプリ終了するため、必要ない


                    pdaTask.WindowManager.BaseRelease()
                    pdaTask.C_SHIPORDER.Release()

                    pdaTask.WindowManager.ClearActionLabel()

                    pdaTask.changeShipOrderVisibleAll(False)

                    pdaTask.OrderInfo = Nothing
                    pdaTask.KirecsRelease()

                    pdaTask.WindowManager.CloseWindow()

                Else
                    '注文選択が出来る状態
                    task.ActionCd = "ORDERTOLABEL"
                End If

            Case Else
                'エラー
                pdaTask.Hardware.warning()

                'エラーメッセージを表示
                '' 画面から'[OK]'の入力待ち
                Dim result As String = ""
                Dim prevWindowMode As EnumWindowMode
                Do While result <> "[OK]"
                    If result = "" Then
                        pdaTask.Hardware.alert()
                        'Debug.WriteLine(CCommon.CNS_MSG_003)
                        prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                        pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_064, CCommon.COLOR_WHITE, CCommon.COLOR_RED)
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                    End If
                    result = task.ReadTextWait(-1)
                Loop
                pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)

                'もし、すでに選択されてるものがあれば
                '色をもとに戻す
                '選択された注文コードで検索
                Dim ret As COrderData = pdaTask.ChkOrderLabelData(pdaTask.checkOrderCd)
                If Not ret Is Nothing Then
                    'pdaTask.setPrevData(ret)
                    'MessageBox.Show("ari")
                    ret.OrderRecord.RowColor = CCommon.COLOR_WHITE
                End If

                '以前に選択したことはメーモリから消す

                'エラーロック
                task.ErrorCd = "KIRECS"
                task.ProcessText = ""
                nextState = GetNextState(task, GetType(CErrorState))
                Return nextState


        End Select

        nextState = GetNextState(task)
        Return nextState
    End Function

    ''' <summary>
    ''' 終了メソッド(未使用)
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExit(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.DoExit")
        Return True
    End Function


End Class
